home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMICUS / AMICUS19.ADF / HouseHold / HouseInv < prev    next >
Text File  |  1989-01-27  |  25KB  |  910 lines

  1. ' The Household Inventory System
  2. ' ------------------------------
  3. ' This is Program #1 of 3:  "HouseInv" -the main program
  4. ' Program #2 is the "HouseInvPrint" program
  5. ' Program #3 is the "HouseInvMaint" program
  6. ' Please do not modify the title screen in any way.
  7. ' January 1987
  8. '
  9. CLEAR ,35000&
  10. numbx=52:NumFlds=8:maxdisp=18
  11. MouseInd=0:FldNum=0:RecCnt=0:CurCol=0:TxtCol=0:NewCur=0:type=0
  12. n=0:m=0:first=0:last=0:OldCnt=0:ErrSw=0:RecNum=0:RC=0:siz=0
  13. x%=0:Lgth%=0:clm%=0:row%=0:offset%=0:offsetp%=0:MouseY%=0
  14. Sldlgth%=0:SldStrt%=0:SldLft%=0:BarStrt%=0:GRx%=0:GRy%=0
  15. A%=0:B%=0:SvA%=0:SvB%=0:BarLgth%=0:Spare%=0:Hi1st%=0
  16. Today$="":strg$="":type$="":x$="":Sep$=""
  17. DIM bx(numbx-1,6),bxtxt$(numbx-1)
  18. DIM FldTxt$(NumFlds-1,1),FldVal$(NumFlds-1)
  19. DIM Fldlen(NumFlds-1),HldVal$(NumFlds-1)
  20. Logo80 3:TxtCol=Blk
  21. COLOR Red,Blk:LOCATE 9,34:PRINT"Please Standby."
  22. Bldgadgets numbx,bx(),bxtxt$()
  23. ' Main Title
  24. DATA 120, 60, 80, 16,0,2, 7,"  Add"
  25. DATA 280, 60, 80, 16,0,2, 7," Review"
  26. DATA 440, 60, 80, 16,0,4, 7,"  Quit"
  27. ' Add
  28. DATA  90,148, 56, 16,7,4, 0,"Cancel"
  29. DATA 148,148, 52, 16,7,2, 0,"  OK"
  30. DATA 202,148, 57, 16,7,1, 0,"Modify"
  31. DATA 114,148, 73, 16,7,1, 0,"Add More"
  32. DATA 189,148, 54, 16,7,4, 0," Quit"
  33. ' Add/Change
  34. DATA 166,  7,100,  9,1,7,-1,""
  35. DATA 166, 23,132,  9,1,7,-1,""
  36. DATA 166, 39, 76,  9,1,7,-1,""
  37. DATA 166, 55, 60,  9,1,7,-1,""
  38. DATA 166, 71, 60,  9,1,7,-1,""
  39. DATA 166, 87, 60,  9,1,7,-1,""
  40. DATA 166,103,132,  9,1,7,-1,""
  41. DATA 166,119,172,  9,1,7,-1,""
  42. DATA 124,148, 55, 16,7,4, 0,"Cancel"
  43. DATA 181,148, 54, 16,7,2, 0,"  OK"
  44. ' Review
  45. DATA   8, 40,576,  8,3,3,-2,""
  46. DATA   8, 48,576,  8,3,3,-2,""
  47. DATA   8, 56,576,  8,3,3,-2,""
  48. DATA   8, 64,576,  8,3,3,-2,""
  49. DATA   8, 72,576,  8,3,3,-2,""
  50. DATA   8, 80,576,  8,3,3,-2,""
  51. DATA   8, 88,576,  8,3,3,-2,""
  52. DATA   8, 96,576,  8,3,3,-2,""
  53. DATA   8,104,576,  8,3,3,-2,""
  54. DATA   8,112,576,  8,3,3,-2,""
  55. DATA   8,120,576,  8,3,3,-2,""
  56. DATA   8,128,576,  8,3,3,-2,""
  57. DATA   8,136,576,  8,3,3,-2,""
  58. DATA   8,144,576,  8,3,3,-2,""
  59. DATA   8,152,576,  8,3,3,-2,""
  60. DATA   8,160,576,  8,3,3,-2,""
  61. DATA   8,168,576,  8,3,3,-2,""
  62. DATA   8,176,576,  8,3,3,-2,""
  63. DATA 508, 12, 88, 16,0,2, 7," Finished" 
  64. DATA 600, 40, 24, 12,0,0,-2,""
  65. DATA 600, 52, 24,120,1,7,-2,""
  66. DATA 600,172, 24, 12,0,0,-2,""
  67. ' Count Initialization
  68. DATA  28, 36, 24, 16,7,4, 0,"No"
  69. DATA 116, 36, 24, 16,7,2, 0,"OK"
  70. ' Count Display
  71. DATA 116, 76, 24, 16,7,2, 0,"OK"
  72. ' Update a Record
  73. DATA  90,148, 56, 16,7,1, 0,"Modify"
  74. DATA 148,148, 52, 16,7,2, 0,"  OK"
  75. DATA 202,148, 57, 16,7,4, 0,"Delete"
  76. ' Record Delete Query
  77. DATA  20, 36, 24, 16,7,4, 0,"No"
  78. DATA 116, 36, 24, 16,7,2, 0,"OK"
  79. ' Restore Deleted Record Query
  80. DATA  68,100, 48, 16,7,2, 0," Yes"
  81. DATA 228,100, 48, 16,7,4, 0,"  No"
  82. ' Help Windows
  83. DATA  36,172, 40, 16,7,4, 0,"More"
  84. DATA 156,172, 40, 16,7,2, 0," OK"
  85. MTA%=0:MTB%=2
  86. AddA%=3:AddB%=4:AddC%=5:AddD%=6:AddE%=7
  87. ChgA%=8:ChgB%=15:ChgC%=16:ChgD%=17
  88. RevA%=18:RevB%=35:RevC%=36:RevD%=37:RevE%=38:RevF%=39
  89. InA%=40:InB%=41
  90. CnA%=42
  91. UpdA%=43:UpdB%=45
  92. DelA%=46:DelB%=47
  93. DQA%=48:DQB%=49
  94. HlpA%=50:HlpB%=51
  95. FOR n=0 TO NumFlds-1
  96.   READ FldTxt$(n,0),FldTxt$(n,1),Fldlen%(n)
  97. NEXT
  98. DATA "Room:","(Required)",10
  99. DATA "Item(s):","(Required)",15
  100. DATA "Date of Purchase:","(mm/dd/yy)", 8
  101. DATA "Original Cost:","(In Dollars)", 6
  102. DATA "Current Worth:","(In Dollars)", 6
  103. DATA "Replacement Cost:","(In Dollars)", 6
  104. DATA "Serial Number:","",15
  105. DATA "Comments:","",20
  106. Sldlgth%=INT(bx(RevE%,3)-2):SldStrt%=INT(bx(RevE%,1)+1)
  107. SldLft%=INT(bx(RevE%,0)+4)
  108. MENU 1,0,1,"Project:"
  109. MENU 1,1,1,"Quit    "
  110. MENU 2,0,1,"Help:"
  111. MENU 2,1,1,"General      "
  112. MENU 2,2,1,"Add          "
  113. MENU 2,3,1,"Review       "
  114. MENU 2,4,1,"Data File    "
  115. MENU 2,5,1,"HouseInvPrint"
  116. MENU 2,6,1,"HouseInvMaint"
  117. MENU 3,0,1,"Data File:"
  118. MENU 3,1,1,"Initialize    "
  119. MENU 3,2,0,"Update Count  "
  120. MENU 3,3,0,"No. of Records"
  121. MENU 4,0,0,""
  122. ON MENU GOSUB MenuRtns:MENU ON 
  123. COLOR Yel,Blk
  124. LOCATE 22,19:PRINT"First use of program?  Please use HELP menu!"
  125. COLOR Cyn,Blk
  126. LOCATE 9,34:PRINT SPACE$(15)
  127. LOCATE 9,11:PRINT"Please enter today's date:"
  128. LOCATE 9,49:PRINT" (in mm/dd/yy format)"
  129. LINE(304,64)-STEP(74,7),Cyn,bf
  130. WHILE Today$="" OR LEN(Today$)<6
  131.   COLOR Blk,Cyn:LOCATE 9,39:GetIp Today$,"CHAR",8
  132. WEND
  133. LINE(80,56)-STEP(488,24),Blk,bf
  134. ON ERROR GOTO InitError
  135. GOSUB GetRecCnt
  136. InitCont:
  137. ON ERROR GOTO 0
  138. IF ErrSw=1 THEN ErrSw=0:RecCnt=0:GOSUB PutRecCnt
  139. OldCnt=RecCnt
  140. GOSUB OpenData
  141. DrawGadgets MTA%,MTB%,bx(),bxtxt$()
  142. LOCATE 22,19:PRINT SPACE$(44)
  143. MENU 3,2,1:MENU 3,3,1
  144. ON MOUSE GOSUB GetMouse
  145. GOTO Main1
  146.  
  147. ' Error Routine Used When Opening Count File During Initilization
  148. InitError:
  149. WINDOW 2
  150. IF ERR=53 THEN
  151.   ErrSw=1:RESUME InitCont
  152. ELSE
  153.   ON ERROR GOTO 0
  154. END IF
  155.  
  156. ' Open Main Data File
  157. ' -------------------
  158. OpenData:
  159. OPEN "R",#1,"HouseInv.Data",103
  160. FIELD #1,1 AS FFlg$,10 AS RFld$(0),15 AS RFld$(1),8 AS RFld$(2),6 AS RFld$(3),6 AS RFld$(4),6 AS RFld$(5),15 AS RFld$(6),20 AS RFld$(7),8 AS RAdd$,8 AS RChg$
  161. RETURN
  162.  
  163. ' Start of Main Processing
  164. ' ------------------------
  165. Main:
  166. Logo80 3
  167. DrawGadgets MTA%,MTB%,bx(),bxtxt$()
  168. Main1:
  169. COLOR Blu,Blk
  170. LOCATE 12,39:PRINT"THE"
  171. LOCATE 14,22:PRINT"H O U S E H O L D   I N V E N T O R Y"
  172. LOCATE 16,38:PRINT"SYSTEM"
  173. COLOR Mag,Blk
  174. LOCATE 18,18:PRINT"D A T A   E N T R Y  &  M A I N T E N A N C E"
  175. COLOR Yel,Blk:LOCATE 22,25:PRINT"Use HELP menus for assistance."
  176. Main2:
  177. A%=MTA%:B%=MTB%:MOUSE ON
  178. type=0:WHILE type=0:SLEEP:WEND:MOUSE OFF
  179. ON type GOTO AddRtn,ReviewRtn,Quit
  180.  
  181. ' Routine to ADD a New Record
  182. ' ---------------------------
  183. AddRtn:
  184. WINDOW 3,"Household Inventory: Add a New Item",(40,0)-(400,184),0,1
  185. AddClear:
  186. COLOR Blk,Cyn:CLS
  187. DrawGadgets AddA%,AddA%,bx(),bxtxt$()
  188. MouseInd=0:type=0
  189. A%=AddA%:B%=AddA%:MOUSE ON
  190. COLOR Blk,Cyn:x%=ChgA%-1
  191. FOR n=0 TO NumFlds-1:FldVal$(n)="":NEXT
  192. FOR n=0 TO NumFlds-1
  193.   FldNum=n
  194.   LOCATE 2+n*2,20-LEN(FldTxt$(n,0))+1:PRINT FldTxt$(n,0)
  195.   LOCATE 3+n*2,20-LEN(FldTxt$(n,1))+1:PRINT FldTxt$(n,1)
  196.   x%=x%+1:DrawGadgets x%,x%,bx(),bxtxt$()
  197.   strg$="":Lgth%=Fldlen%(n):COLOR Blk,Blu
  198.   IF n>2 AND n<6 THEN type$="REAL" ELSE type$="CHAR"
  199.   LOCATE 2+n*2,22:GetIp strg$,type$,Lgth%
  200.   IF n<2 THEN
  201.     IF MouseInd=0 THEN
  202.       WHILE strg$="":LOCATE 2+n*2,22:GetIp strg$,type$,Lgth%:WEND
  203.     END IF
  204.   END IF
  205.   IF MouseInd=0 THEN
  206.     FldVal$(n)=strg$
  207.     COLOR Blk,Cyn:LOCATE 3+n*2,1:PRINT SPACE$(20)
  208.     IF n=1 THEN
  209.       B%=AddC%:DrawGadgets AddB%,AddC%,bx(),bxtxt$()
  210.       COLOR Blk,Cyn
  211.     END IF
  212.   ELSE
  213.     COLOR Blk,Blu:n=NumFlds-1
  214.   END IF
  215. NEXT
  216. WHILE MouseInd=0:SLEEP:WEND
  217. ON type GOTO AddCancel,AddOK,AddChange
  218. AddCancel:
  219. FOR n=0 TO NumFlds-1:FldVal$(n)="":NEXT
  220. GOTO AddEnd
  221. AddChange:
  222. COLOR Blk,Cyn
  223. IF FldNum+1=<NumFlds-1 THEN
  224.   LOCATE 1+(FldNum+1)*2,1:PRINT SPACE$(20)
  225.   FOR n=FldNum+1 TO NumFlds-1
  226.     LOCATE 2+n*2,20-LEN(FldTxt$(n,0))+1:PRINT FldTxt$(n,0)
  227.     x%=x%+1:DrawGadgets x%,x%,bx(),bxtxt$()
  228.   NEXT
  229. END IF
  230. MOUSE OFF:GOSUB DoAChange:COLOR Blk,Blu:MOUSE ON
  231. LINE(85,147)-(260,170),Cyn,bf
  232. LOCATE 18,4:COLOR Cyn,Blu:PRINT SPACE$(12)+"Select Option"+SPACE$(13)
  233. DrawGadgets AddA%,AddC%,bx(),bxtxt$()
  234. type=0:WHILE type=0:SLEEP:WEND:MOUSE OFF
  235. ON type GOTO AddCancel,AddOK,AddChange
  236. AddOK:
  237. LSET FFlg$="0"
  238. FOR n=0 TO NumFlds-1
  239.   IF n<3 OR n>5 THEN
  240.     LSET RFld$(n)=FldVal$(n)
  241.   ELSE
  242.     RSET RFld$(n)=FldVal$(n)
  243.   END IF
  244. NEXT    
  245. LSET RAdd$=Today$:LSET RChg$=" "
  246. RecCnt=RecCnt+1
  247. PUT #1,RecCnt
  248. AddEnd:
  249. LOCATE 18,4:COLOR Cyn,Blu:PRINT" Your Request has been Complied With. "
  250. LINE(85,147)-(260,170),Cyn,bf
  251. DrawGadgets AddD%,AddE%,bx(),bxtxt$()
  252. A%=AddD%:B%=AddE%:MOUSE ON
  253. type=0:WHILE type=0:SLEEP:WEND:MOUSE OFF
  254. ON type GOTO AddClear,AddExit
  255. AddExit:
  256. IF RecCnt<>OldCnt THEN GOSUB PutRecCnt
  257. WINDOW CLOSE 3:GOTO Main2
  258.  
  259. ' Routine to REVIEW All Current Records
  260. ' -------------------------------------  
  261. ReviewRtn:
  262. MENU 3,0,0
  263. IF RecCnt=0 THEN RRNoRecs
  264. n=Sldlgth%
  265. BarLgth%=CINT((n/100)*((maxdisp/RecCnt)*100))
  266. IF BarLgth%>Sldlgth% THEN BarLgth%=Sldlgth%
  267. IF BarLgth%<5 THEN BarLgth%=5
  268. Spare%=Sldlgth%-BarLgth%
  269. COLOR Mag,Blk:CLS
  270. LOCATE 1,26:PRINT"REVIEW OF HOUSEHOLD INVENTORY"
  271. COLOR Yel,Blk:LOCATE 2,26:PRINT"Click on record to select it."
  272. LOCATE 3,25:PRINT USING "Number  of items on file: #####";RecCnt
  273. DrawGadgets RevC%,RevC%,bx(),bxtxt$()
  274. Hi1st%=1:IF RecCnt>maxdisp THEN Hi1st%=RecCnt-maxdisp
  275. COLOR Blu,Blk
  276. LOCATE 5,2:PRINT"Room------ Item----------- Pur-Date"
  277. LOCATE 5,38:PRINT"O-Cost CWorth R-Cost Serial-Number--"
  278. LINE(0,40)-(592,184),Cyn,bf
  279. DrawGadgets RevD%,RevF%,bx(),bxtxt$()
  280. COLOR Wht
  281. AREA(612,40):AREA STEP(-12,12):AREA STEP(24,0):AREAFILL
  282. AREA(612,184):AREA STEP(-12,-12):AREA STEP(24,0):AREAFILL
  283. DIM DispFile$(RecCnt-1)
  284. COLOR Red,Cyn:LOCATE 7,31:PRINT"Loading File"
  285. FOR n=0 TO RecCnt-1
  286.   GET #1,n+1
  287.   IF FFlg$="0" THEN Sep$=" " ELSE Sep$="*"
  288.   DispFile$(n)=Sep$
  289.   FOR m=0 TO NumFlds-2
  290.     DispFile$(n)=DispFile$(n)+RFld$(m)+Sep$
  291.   NEXT
  292. NEXT
  293. LOCATE 7,31:PRINT SPACE$(12)
  294. first=0
  295. IF RecCnt<maxdisp+1 THEN
  296.   last=RecCnt-1
  297.   COLOR Yel,Blk:LOCATE 4,31:PRINT"All Items Displayed"
  298. ELSE
  299.   last=maxdisp-1
  300. END IF
  301. DispScreen:
  302. GOSUB DispRecNo
  303. COLOR Blk,Cyn:row%=6-1
  304. LINE(0,40)-(592,184),Cyn,bf
  305. FOR n=first TO last
  306.   row%=row%+1:LOCATE row%,1:PRINT DispFile$(n)
  307. NEXT
  308. GOSUB DrawBar
  309. RevGdgt:
  310. A%=RevA%:B%=RevF%:MOUSE ON
  311. type=0:WHILE type=0:SLEEP:WEND:MOUSE OFF
  312. IF type<maxdisp+1 THEN GetRecord
  313. type=type-maxdisp
  314. ON type GOTO RevExit,ScrollUp,ChgDisp,ScrollDwn
  315. ScrollUp:
  316. IF first+1>1 THEN
  317.   first=first-1:last=last-1
  318.   GOTO DispScreen
  319. ELSE
  320.   GOTO RevGdgt
  321. END IF
  322. ScrollDwn:
  323. IF RecCnt>last+1 THEN
  324.   first=first+1:last=last+1
  325.   GOTO DispScreen
  326. ELSE
  327.   GOTO RevGdgt
  328. END IF
  329. ChgDisp:
  330. IF maxdisp=>RecCnt THEN RevGdgt
  331. offset%=MouseY%-(SldStrt%-1)
  332. offsetp%=CINT(offset%/Sldlgth%)*100
  333. first=((RecCnt/100)*offsetp%)
  334. last=first+(maxdisp-1)
  335. IF last>RecCnt THEN last=RecCnt-1
  336. first=(last-maxdisp)+1
  337. GOTO DispScreen
  338. GetRecord:
  339. IF type>(last-first)+1 THEN RevGdgt
  340. RecNum=first+type
  341. WINDOW 8,"Household Inventory: Update Item",(40,0)-(400,184),0,1
  342. COLOR Blk,Cyn:CLS
  343. GET #1,RecNum
  344. IF FFlg$="1" THEN
  345.   LOCATE 6,5:PRINT"The selected record has been deleted."
  346.   LOCATE 8,10:PRINT"Do you wish to restore it?"
  347.   DrawGadgets DQA%,DQB%,bx(),bxtxt$()
  348.   A%=DQA%:B%=DQB%:MOUSE ON
  349.   type=0:WHILE type=0:SLEEP:WEND:MOUSE OFF
  350.   IF type=1 THEN
  351.     LSET FFlg$="0":LSET RChg$=Today$
  352.     PUT #1,RecNum
  353.     COLOR Blk,Cyn:CLS
  354.     GOTO ShoRec
  355.   ELSE
  356.     GOTO GRExit
  357.   END IF
  358. END IF
  359. ShoRec:
  360. x%=ChgA%-1
  361. FOR n=0 TO NumFlds-1
  362.   FldVal$(n)=RFld$(n)
  363.   COLOR Blk,Cyn
  364.   LOCATE 2+n*2,20-LEN(FldTxt$(n,0))+1:PRINT FldTxt$(n,0)
  365.   x%=x%+1:DrawGadgets x%,x%,bx(),bxtxt$()
  366.   IF n>2 AND n<6 THEN
  367.     offset=0
  368.     FOR m=1 TO LEN(FldVal$(n))
  369.       IF MID$(FldVal$(n),m,1)<>" " THEN offset=m:m=LEN(FldVal$(n))
  370.     NEXT
  371.     IF offset=0 THEN FldVal$(n)="" ELSE FldVal$(n)=MID$(FldVal$(n),offset)
  372.   ELSE
  373.     siz=0
  374.     FOR m=LEN(FldVal$(n)) TO 1 STEP -1
  375.       IF MID$(FldVal$(n),m,1)<>" " THEN siz=m:m=1
  376.     NEXT
  377.     IF siz=0 THEN FldVal$(n)="" ELSE FldVal$(n)=MID$(FldVal$(n),1,siz)
  378.   END IF
  379.   COLOR Blk,Blu:LOCATE 2+n*2,22:PRINT FldVal$(n)
  380. NEXT
  381. LOCATE 18,4:COLOR Cyn,Blu:PRINT"   Please select desired function.    "
  382. DrawGadgets UpdA%,UpdB%,bx(),bxtxt$()
  383. A%=UpdA%:B%=UpdB%:MOUSE ON:type=0:WHILE type=0:SLEEP:WEND
  384. ON type GOTO GRMod,GRExit,GRDel
  385. GRMod:
  386. MOUSE OFF:GOSUB DoAChange:MOUSE ON
  387. IF RC<>0 THEN GRExit
  388. LSET FFlg$="0"
  389. FOR n=0 TO NumFlds-1
  390.   IF n<3 OR n>5 THEN
  391.     LSET RFld$(n)=FldVal$(n)
  392.   ELSE
  393.     RSET RFld$(n)=FldVal$(n)
  394.   END IF
  395. NEXT    
  396. LSET RChg$=Today$ 
  397. PUT #1,RecNum
  398. GOTO GRExit
  399. GRDel:
  400. LINE(85,148)-(300,172),Cyn,bf
  401. WINDOW 9,,(440,40)-(608,98),0,1
  402. COLOR Blu,Yel:CLS
  403. LOCATE 2,2:PRINT"OK to delete record"
  404. LOCATE 3,2:PRINT"shown at left?"
  405. DrawGadgets DelA%,DelB%,bx(),bxtxt$()
  406. A%=DelA%:B%=DelB%:type=0:WHILE type=0:SLEEP:WEND
  407. ON type GOTO GRDelEnd,GRDelYes
  408. GRDelYes:
  409. LSET FFlg$="1"
  410. PUT #1,RecNum
  411. GRDelEnd:
  412. WINDOW CLOSE 9
  413. GOTO GRExit
  414. GRExit:
  415. MOUSE OFF:WINDOW CLOSE 8
  416. GOTO RevGdgt
  417.  
  418. ' No Records to Review
  419. RRNoRecs:
  420. MENU OFF
  421. WINDOW 4,,(440,40)-(608,80),0,1
  422. COLOR Blu,Yel:CLS
  423. LOCATE 2,3:PRINT"No Data to Review"
  424. LOCATE 4,3:PRINT"Press left Button"
  425. LOCATE 5,3:PRINT"to Continue."
  426. WHILE MOUSE(0)=0:WEND
  427. WINDOW CLOSE 4
  428. MENU ON
  429. GOTO Main2
  430.  
  431. DispRecNo:
  432. IF RecCnt>maxdisp THEN
  433.   COLOR Yel,Blk:LOCATE 4,22
  434.   PRINT USING "Record number at top of display: #####";first+1
  435. END IF
  436. RETURN
  437.  
  438. DrawBar:
  439. BarStrt%=SldStrt%+(Spare%-((RecCnt-(last+1))*(Spare%/Hi1st%)))
  440. DrawGadgets RevE%,RevE%,bx(),bxtxt$()
  441. LINE(SldLft%,BarStrt%)-STEP(17,BarLgth%),Wht,bf
  442. RETURN
  443.  
  444. ' Leave Review Routine
  445. RevExit:                 
  446. ERASE DispFile$
  447. MENU 3,0,1
  448. GOTO Main
  449.  
  450. ' Change an Existing Record (During Either ADD or REVIEW)
  451. ' -------------------------------------------------------
  452. DoAChange:
  453. SvA%=A%:SvB%=B%
  454. FOR n=0 TO NumFlds-1:HldVal$(n)=FldVal$(n):NEXT
  455. LINE(85,147)-(260,170),Cyn,bf
  456. DrawGadgets ChgC%,ChgD%,bx(),bxtxt$()
  457. DACGdgt:
  458. COLOR Cyn,Blu:LOCATE 18,4:PRINT" Click in box it is desired to change "
  459. A%=ChgA%:B%=ChgD%:MOUSE ON
  460. type=0:WHILE type=0:SLEEP:WEND:MOUSE OFF
  461. IF type>8 THEN
  462.   type=type-8
  463.   ON type GOTO ChngCancel,ChngOK
  464. END IF
  465. COLOR Cyn,Blu:LOCATE 18,4:PRINT"   Press RETURN after making change   "
  466. n=type-1:Lgth%=Fldlen%(n):strg$=FldVal$(n):COLOR Blk,Wht
  467. IF n>2 AND n<6 THEN type$="REAL" ELSE type$="CHAR"
  468. LOCATE 2+n*2,22:GetIp strg$,type$,Lgth%
  469. IF n<2 THEN
  470.   WHILE strg$="":LOCATE 2+n*2,22:GetIp strg$,type$,Lgth%:WEND
  471. END IF
  472. FldVal$(n)=strg$
  473. GOTO DACGdgt
  474. ChngCancel:
  475. COLOR ,Cyn:LOCATE 18,4:PRINT SPACE$(38)
  476. COLOR Blk,Blu:x%=ChgA%-1
  477. FOR n=0 TO NumFlds-1
  478.   FldVal$(n)=HldVal$(n)
  479.   x%=x%+1:DrawGadgets x%,x%,bx(),bxtxt$()
  480.   LOCATE 2+n*2,22:PRINT FldVal$(n)
  481. NEXT
  482. FldNum=n:RC=4
  483. GOTO DACExit
  484. ChngOK:
  485. RC=0
  486. DACExit:
  487. A%=SvA%:B%=SvB%:COLOR Blu,Cyn
  488. RETURN
  489.  
  490. ' INPUT and WRITE Record Count
  491. ' ----------------------------
  492. GetRecCnt:
  493. OPEN "HouseInv.Count" FOR INPUT AS #2
  494. INPUT #2,RecCnt
  495. CLOSE #2
  496. RETURN
  497. PutRecCnt:
  498. WINDOW 5,,(440,40)-(608,80),0,1
  499. COLOR Blu,Yel:CLS
  500. LOCATE 2,4:PRINT"Updating Count"
  501. LOCATE 3,9:PRINT"File"
  502. OldCnt=RecCnt
  503. OPEN "HouseInv.Count" FOR OUTPUT AS #2
  504. WRITE #2,RecCnt
  505. CLOSE #2
  506. WINDOW CLOSE 5
  507. RETURN
  508.  
  509. ' Time to QUIT and Return to Basic
  510. ' --------------------------------
  511. Quit:
  512. IF RecCnt<>OldCnt THEN GOSUB PutRecCnt
  513. CLOSE #1:CLOSE #2
  514. MENU OFF:MENU RESET
  515. CLS:WINDOW CLOSE 2:SCREEN CLOSE 1:END
  516.  
  517. ' Mouse Interrupt Routine
  518. ' -----------------------
  519. GetMouse:
  520. GetGadget A%,B%,bx(),bxtxt$(),type
  521. RETURN
  522.  
  523. ' Menu Request Handling Routines
  524. ' ------------------------------
  525. MenuRtns:
  526. MOUSE OFF:SvA%=A%:SvB%=B%
  527. m=MENU(0):i=MENU(1)
  528. MENU OFF
  529. ON m GOTO ProjRtn,HelpRtn,DataRtn
  530. ProjRtn:
  531. ON i GOTO Mquit
  532. Mquit:
  533. GOTO Quit
  534. HelpRtn:
  535. GOSUB DoHelp:GOTO MRExit
  536. DataRtn:
  537. ON i GOTO MInit,MUpdtCnt,MNum
  538. MInit:
  539. WINDOW 6,,(440,40)-(608,96),0,1
  540. COLOR Blu,Yel:CLS
  541. LOCATE 2,2:PRINT"This  option   will"
  542. LOCATE 3,2:PRINT"delete all  records"
  543. LOCATE 4,2:PRINT"on file."
  544. DrawGadgets InA%,InB%,bx(),bxtxt$()
  545. A%=InA%:B%=InB%:GOSUB MenuMouse
  546. IF RecCnt>0 AND type=2 THEN
  547.   CLOSE #1
  548.   KILL"HouseInv.Data.info"
  549.   KILL"HouseInv.Data"
  550.   GOSUB OpenData
  551. END IF
  552. WINDOW CLOSE 6
  553. ON type GOTO MInExit,MInOK
  554. MInOK:
  555. RecCnt=0:GOSUB PutRecCnt
  556. MInExit:
  557. GOTO MRExit
  558. MUpdtCnt:
  559. GOSUB PutRecCnt
  560. GOTO MRExit
  561. MNum:
  562. WINDOW 6,,(440,40)-(608,136),0,1
  563. COLOR Blu,Yel:CLS
  564. LOCATE 2,4:PRINT"Record  Counts"
  565. LOCATE 4,2:PRINT USING"Commited:  #####";OldCnt
  566. LOCATE 5,2:PRINT USING"In system: #####";RecCnt
  567. IF OldCnt<>RecCnt THEN
  568.   LOCATE 7,2:PRINT"Use  'Update Count'"
  569.   LOCATE 8,2:PRINT"menu to commit  all"
  570.   LOCATE 9,2:PRINT"all records."
  571. END IF
  572. DrawGadgets CnA%,CnA%,bx(),bxtxt$()
  573. A%=CnA%:B%=CnA%:GOSUB MenuMouse
  574. WINDOW CLOSE 6
  575. GOTO MRExit
  576. MRExit:
  577. A%=SvA%:B%=SvB%:type=0:MOUSE ON:MENU ON
  578. RETURN
  579.  
  580. ' Help Routines (requested via Menu Routines)
  581. DoHelp:
  582. WINDOW 9,,(408,0)-(631,186),0,1
  583. COLOR Blu,Yel:CLS:LOCATE 2,1
  584. ON i GOTO HlpGen,HlpAdd,HlpRev,HlpData,HlpIPrt,HlpIMaint
  585. HlpGen:
  586. PRINT" 'The  Household  Inventory"
  587. PRINT" System'  is  made  up   of"
  588. PRINT" three programs:  HouseInv,"
  589. PRINT" HouseInvPrint,         and"
  590. PRINT" HouseInvMaint.":PRINT" "
  591. PRINT" These programs allow users"
  592. PRINT" to  create, maintain,  and"
  593. PRINT" report on a file of  their"
  594. PRINT" Household Inventory.   The"
  595. PRINT" data   are  stored  in   a"
  596. PRINT" direct access file on  the"
  597. PRINT" same disk as that used  by"
  598. PRINT" the program.":PRINT" "
  599. PRINT" Other Help menu items pro-"
  600. PRINT" vide further  information."
  601. DrawGadgets HlpA%,HlpB%,bx(),bxtxt$()
  602. A%=HlpA%:B%=HlpB%:GOSUB MenuMouse
  603. ON type GOTO HlpGen1,HlpExit
  604. HlpGen1:
  605. COLOR Blu,Yel:CLS:LOCATE 2,1
  606. PRINT" "
  607. PRINT" These  programs, the  data"
  608. PRINT" files, and a copy of Basic"
  609. PRINT" should  be kept on a  sep-"
  610. PRINT" arate  disk,  a  copy   of"
  611. PRINT" which   is  stored  in   a"
  612. PRINT" Safety Deposit Box."
  613. DrawGadgets HlpB%,HlpB%,bx(),bxtxt$()
  614. A%=HlpB%:B%=HlpB%:GOSUB MenuMouse
  615. GOTO HlpExit
  616. HlpAdd:
  617. PRINT" Only Room & Item are  Man-"
  618. PRINT" datory.  Either enter  the"
  619. PRINT" requested  data,   (RETURN"
  620. PRINT" must be pressed for it  to"
  621. PRINT" register),  or  click   in"
  622. PRINT" the desired gadget:":PRINT" "
  623. PRINT" Cancel   -clear the item"
  624. PRINT" OK       -add item to file"
  625. PRINT" Modify   -modify data just"
  626. PRINT"           entered":PRINT" "
  627. PRINT" If Cancel or OK selected:"
  628. PRINT" Add More -add another item"
  629. PRINT" Quit     -end add;  update"
  630. PRINT"           count file"
  631. DrawGadgets HlpA%,HlpB%,bx(),bxtxt$()
  632. A%=HlpA%:B%=HlpB%:GOSUB MenuMouse
  633. ON type GOTO HlpAdd1,HlpExit
  634. HlpAdd1:
  635. COLOR Blu,Yel:CLS:LOCATE 2,1
  636. PRINT" When 'Modify' is selected,"
  637. PRINT" click   on  item   it   is"
  638. PRINT" desired  to  change,   and"
  639. PRINT" enter or update the value."
  640. PRINT" When  updating,  ESC  will"
  641. PRINT" clear  the value to  null."
  642. PRINT" 'RETURN'  must be  pressed"
  643. PRINT" for  change  to  register."
  644. PRINT" Click  on  desired  gadget"
  645. PRINT" when appropriate:":PRINT" "
  646. PRINT" Cancel -Changes        are"
  647. PRINT"         removed"
  648. PRINT" Add    -Changes     remain":PRINT" "
  649. PRINT" In  both  cases  you   are"
  650. PRINT" returned  to the  original"
  651. PRINT" window."
  652. DrawGadgets HlpB%,HlpB%,bx(),bxtxt$()
  653. A%=HlpB%:B%=HlpB%:GOSUB MenuMouse
  654. GOTO HlpExit:
  655. HlpRev:
  656. PRINT" 'Review'  allows  you   to"
  657. PRINT" browse  through  the  data"
  658. PRINT" file.  Click in the slider"
  659. PRINT" to move several records at"
  660. PRINT" a time, or the arrow heads"
  661. PRINT" to   scroll  one   record."
  662. PRINT" Clicking on a record  will"
  663. PRINT" give you an Update  Window"
  664. PRINT" with gadgets:":PRINT" "
  665. PRINT" Modify -modify record"
  666. PRINT" OK     -accept changes and" 
  667. PRINT"         return to Review"
  668. PRINT" Delete -delete record":PRINT" "
  669. PRINT" See  Add  Help  for   more"
  670. PRINT" information on Modify."
  671. DrawGadgets HlpA%,HlpB%,bx(),bxtxt$()
  672. A%=HlpA%:B%=HlpB%:GOSUB MenuMouse
  673. ON type GOTO HlpRev1,HlpExit
  674. HlpRev1:                     
  675. COLOR Blu,Yel:CLS:LOCATE 2,1
  676. PRINT" Delete is a logical delete"
  677. PRINT" I.E.  it is  not  actually"
  678. PRINT" deleted   from  the   file"
  679. PRINT" until  the file is  reorg-"
  680. PRINT" anized,  when it  is  gone"
  681. PRINT" forever!  Instead, it will"
  682. PRINT" show  up with fields  sep-"
  683. PRINT" arated  by asterisks.   It"
  684. PRINT" may   be    restored    by" 
  685. PRINT" clicking  on it, AND  then"
  686. PRINT" the   subsequent     'Yes'"
  687. PRINT" gadget.":PRINT" "
  688. PRINT" 'Review' shows the file as"
  689. PRINT" it was at the time of  the"
  690. PRINT" request.    Changes    and"
  691. PRINT" deletes   will  not   show"
  692. PRINT" until the next 'Review'."
  693. DrawGadgets HlpB%,HlpB%,bx(),bxtxt$()
  694. A%=HlpB%:B%=HlpB%:GOSUB MenuMouse
  695. GOTO HlpExit
  696. HlpData:
  697. PRINT" The   'Data  File'   menu "
  698. PRINT" provides:":PRINT" "
  699. PRINT" Initialize -creates a zero"
  700. PRINT"    count file.   Use  very"
  701. PRINT"    first time or when  re-"
  702. PRINT"    starting from  scratch."
  703. PRINT" Update Count  -count  file"
  704. PRINT"    is  updated to  reflect"
  705. PRINT"    newly added records."
  706. PRINT" No. of Records      -lists"
  707. PRINT"    number  of  records  in"
  708. PRINT"    system  and  known   by"
  709. PRINT"    count file."
  710. DrawGadgets HlpB%,HlpB%,bx(),bxtxt$()
  711. A%=HlpB%:B%=HlpB%:GOSUB MenuMouse
  712. GOTO HlpExit
  713. HlpIPrt:
  714. HlpIMaint:
  715. PRINT" In the interests of memory"
  716. PRINT" conservation and increased"
  717. PRINT" flexibility, the   printer"
  718. PRINT" and    file    maintenance"
  719. PRINT" routines are contained  in"
  720. PRINT" separate  programs   named"
  721. PRINT" 'HouseInvPrint'        and"
  722. PRINT" 'HouseInvMaint'.":PRINT" "
  723. PRINT" Please  use the Help menus"
  724. PRINT" in   those  programs   for"
  725. PRINT" further information."
  726. DrawGadgets HlpB%,HlpB%,bx(),bxtxt$()
  727. A%=HlpB%:B%=HlpB%:GOSUB MenuMouse
  728. GOTO HlpExit
  729. HlpExit:
  730. WINDOW CLOSE 9:RETURN
  731.  
  732. ' Mouse Routine for Menu Routines
  733. MenuMouse:
  734. type=0
  735. WHILE type=0:GetGadget A%,B%,bx(),bxtxt$(),type:WEND
  736. RETURN
  737.  
  738. ' Various SUBPROGRAMS
  739. ' -------------------
  740. SUB Logo80 (Depth%) STATIC
  741. SHARED Blk,Blu,Grn,Cyn,Red,Mag,Yel,Wht
  742. IF first=0 THEN
  743.   first=1
  744.   SCREEN 1,640,200,Depth%,2
  745.   WINDOW 2,,,16,1
  746.   COLOR ,0:CLS
  747.   PALETTE 0,0,0,0  :Blk=0:'Black
  748.   PALETTE 1,0,0,1  :Blu=1:'Blue
  749.   PALETTE 2,0,.75,0:Grn=2:'Green
  750.   PALETTE 3,0,1,1  :Cyn=3:'Cyan
  751.   PALETTE 4,1,0,0  :Red=4:'Red
  752.   PALETTE 5,1,0,1  :Mag=5:'Magenta
  753.   PALETTE 6,1,.8,0 :Yel=6:'Yellow
  754.   PALETTE 7,1,1,1  :Wht=7:'White
  755. END IF
  756. COLOR ,Blk:CLS
  757. AREA(376,8):AREA STEP(64,0):AREA STEP(-20,16)
  758. AREA STEP(0,24):AREA STEP(-24,0):AREA STEP(0,-24)
  759. COLOR Blu:AREAFILL
  760. AREA(360,8):AREA STEP(32,0):AREA STEP(0,12)
  761. AREA STEP(-16,0):AREA STEP(0,4):AREA STEP(8,0):AREA STEP(0,8)
  762. AREA STEP(-8,0):AREA STEP(0,4):AREA STEP(24,0):AREA STEP(0,12)
  763. AREA STEP(-40,0):COLOR Grn:AREAFILL
  764. AREA(328,8):AREA STEP(24,0):AREA STEP(0,28)
  765. AREA STEP(24,0):AREA STEP(0,12):AREA STEP(-48,0)
  766. COLOR Red:AREAFILL
  767. AREA(272,8):AREA STEP(64,0):AREA STEP(0,12)
  768. AREA STEP(-20,0):AREA STEP(0,28):AREA STEP(-24,0):AREA STEP(0,-28)
  769. AREA STEP(-20,0):COLOR Cyn:AREAFILL
  770. AREA(264,8):AREA STEP(16,0):AREA STEP(24,40)
  771. AREA STEP(-16,0):AREA STEP(-8,-12):AREA STEP(-16,0):AREA STEP(-8,12)
  772. AREA STEP(-16,0):COLOR Mag:AREAFILL
  773. AREA(200,8):AREA STEP(56,0):AREA STEP(0,16)
  774. AREA STEP(-24,0):AREA STEP(0,-4):AREA STEP(-8,0):AREA STEP(0,16)
  775. AREA STEP(8,0):AREA STEP(0,-4):AREA STEP(24,0):AREA STEP(0,16)
  776. AREA STEP(-56,0):COLOR Yel:AREAFILL
  777. COLOR Blu,Blk:LOCATE 24,7
  778. PRINT"Bryan D. Catley  2221 Glasgow Road  Alexandria  Virginia  22307-1819";
  779. END SUB
  780.  
  781. SUB Bldgadgets (Num,T1(),T2$()) STATIC
  782. FOR n=0 TO Num-1
  783.   FOR m=0 TO 6
  784.     READ T1(n,m)
  785.   NEXT m
  786.   READ T2$(n)
  787. NEXT n
  788. END SUB
  789.  
  790. SUB DrawGadgets (Ga%,Gb%,T1(),T2$()) STATIC
  791. FOR n=Ga% TO Gb%
  792.   x1=T1(n,0):y1=T1(n,1):x2=x1+T1(n,2):y2=y1+T1(n,3)
  793.   bg=T1(n,4):fg=T1(n,5):bo=T1(n,6)
  794.   LINE(x1,y1)-(x2,y2),bg,bf:LINE(x1,y1)-(x2,y2),fg,B
  795.   IF bo>-1 THEN
  796.     LINE(x1+2,y1+2)-(x2-2,y2-2),fg,B
  797.     LINE(x2+1,y1+1)-(x2+1,y2+1),bo
  798.     LINE(x2+1,y2+1)-(x1+1,y2+1),bo
  799.     COLOR fg,bg:row%=INT(y1/8+2):col%=INT(x1/8+2)
  800.     LOCATE row%,col%:PRINT T2$(n);
  801.   END IF
  802. NEXT n
  803. END SUB
  804.  
  805. SUB GetGadget (Ga%,Gb%,T1(),T2$(),type) STATIC
  806. SHARED MouseX%,MouseY%,MouseInd
  807. WHILE MOUSE(0)=0:WEND
  808. r%=CSRLIN:c%=POS(0)
  809. mx=MOUSE(1):my=MOUSE(2)
  810. MouseX%=mx:MouseY%=my:MouseInd=0
  811. FOR n=Ga% TO Gb%
  812.   IF mx>T1(n,0) AND mx<T1(n,0)+T1(n,2) THEN
  813.     IF my>T1(n,1) AND my<T1(n,1)+T1(n,3) THEN
  814.       bg=T1(n,4):fg=T1(n,5):bo=T1(n,6)
  815.       IF bo>-1 THEN
  816.         x1=T1(n,0)+2:y1=T1(n,1)+2
  817.         x2=x1+T1(n,2)-4:y2=y1+T1(n,3)-4
  818.         LINE(x1,y1)-(x2,y2),fg,bf
  819.         COLOR bg,fg:row%=INT(y1/8+2):col%=INT(x1/8+2)
  820.         LOCATE row%,col%:PRINT T2$(n);
  821.       ELSE
  822.         IF bo=-1 THEN
  823.           x1=T1(n,0):y1=T1(n,1):x2=x1+T1(n,2):y2=y1+T1(n,3)
  824.           LINE(x1,y1)-(x2,y2),fg,bf:LINE(x1,y1)-(x2,y2),bg,B
  825.         END IF
  826.       END IF
  827.       type=n-Ga%+1:n=Gb%:MouseInd=1
  828.       IF bo>-1 THEN n%=type+Ga%-1
  829.     END IF
  830.   END IF
  831. NEXT n
  832. WHILE MOUSE(0)<>0:WEND
  833. IF type<>0 AND bo>-1 THEN DrawGadgets n%,n%,T1(),T2$()
  834. LOCATE r%,c%
  835. END SUB
  836.  
  837. SUB GetIp (Text$,DataType$,MaxLen%) STATIC
  838. SHARED TxtCol,NewCur,MouseInd
  839. start=POS(0):cur=0:COLOR TxtCol
  840. xpix=(start-1)*8:ypix=(CSRLIN-1)*8
  841. IF FirstTime=0 THEN FirstTime=1:NewCur=1:DIM IPcursor%(46)
  842. IF NewCur=1 THEN
  843.   NewCur=0
  844.   CurCol=TxtCol-1:IF CurCol<0 THEN CurCol=TxtCol+1
  845.   LINE(xpix,ypix)-STEP(7,7),CurCol,bf
  846.   GET(xpix,ypix)-STEP(7,7),IPcursor%
  847. END IF
  848. ShoText:
  849. GOSUB DisplayText
  850. NxtChar:
  851. x$="":MouseInd=0:LeftPart$="":RightPart$=""
  852. WHILE x$="" AND MouseInd=0:x$=INKEY$:WEND
  853. IF MouseInd<>0  THEN GetDone  ' Mouse was clicked
  854. IF x$=CHR$(30)  THEN CurRight ' Right-cursor
  855. IF x$=CHR$(31)  THEN CurLeft  ' Left-cursor
  856. IF x$=CHR$(8)   THEN DelLeft  ' Back-space key
  857. IF x$=CHR$(127) THEN DelRight ' Delete key
  858. IF x$=CHR$(27)  THEN ClrText  ' Escape key
  859. IF x$=CHR$(13)  THEN GetDone  ' Return key
  860. IF DataType$="CHAR" THEN
  861.   IF x$<CHR$(32) OR x$>CHR$(127) THEN 
  862.     BEEP:GOTO NxtChar
  863.   END IF
  864. ELSEIF DataType$="REAL" THEN
  865.   IF (x$<CHR$(48) OR x$>CHR$(57)) AND (x$<>".") THEN
  866.     BEEP:GOTO NxtChar
  867.   END IF
  868. ELSEIF DataType$="INT" THEN
  869.   IF x$<CHR$(48) OR x$>CHR$(57) THEN
  870.     BEEP:GOTO NxtChar
  871.   END IF
  872. END IF
  873. InsertChar:
  874. IF LEN(Text$)=MaxLen% THEN BEEP:GOTO NxtChar
  875. IF cur>0 THEN LeftPart$=MID$(Text$,1,cur)
  876. IF LEN(Text$)>0 THEN RightPart$=MID$(Text$,cur+1,LEN(Text$)-LEN(LeftPart$))
  877. Text$=LeftPart$+x$+RightPart$:cur=cur+1
  878. GOTO ShoText
  879. CurRight:
  880. IF cur=LEN(Text$) THEN NxtChar
  881. cur=cur+1:GOTO ShoText
  882. CurLeft:
  883. IF cur=0 THEN NxtChar
  884. cur=cur-1:GOTO ShoText
  885. DelLeft:
  886. IF LEN(Text$)=0 OR cur=0 THEN BEEP:GOTO NxtChar
  887. IF cur>1 THEN LeftPart$=MID$(Text$,1,cur-1)
  888. IF LEN(Text$)>cur THEN RightPart$=MID$(Text$,cur+1,LEN(Text$)-cur)
  889. Text$=LeftPart$+RightPart$
  890. cur=cur-1:GOTO ShoText
  891. DelRight:
  892. IF LEN(Text$)=0 OR cur=LEN(Text$) THEN BEEP:GOTO NxtChar
  893. IF cur>0 THEN LeftPart$=MID$(Text$,1,cur)
  894. IF cur+1<LEN(Text$) THEN RightPart$=MID$(Text$,cur+2,LEN(Text$)-cur+1)
  895. Text$=LeftPart$+RightPart$
  896. GOTO ShoText
  897. ClrText:
  898. PRINT SPACE$(MaxLen%+1);:LOCATE ,start
  899. cur=0:Text$="":GOTO ShoText
  900. DisplayText:
  901. PRINT Text$+SPACE$(MaxLen%+1-LEN(Text$));:LOCATE ,start
  902. xpix=(start+cur-1)*8:PUT(xpix,ypix),IPcursor%
  903. RETURN
  904. GetDone:
  905. PUT(xpix,ypix),IPcursor%
  906. END SUB
  907.  
  908.   
  909.